package com.sinosoft.ptas.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.sinosoft.framework.core.common.exception.BusinessException;
import com.sinosoft.ptas.control.dto.OrganizationData;
import com.sinosoft.ptas.entity.DefaultTargetEntity;
import com.sinosoft.ptas.entity.TargetOrgRefEntity;

/**
 * 默认目标持久化接口定义
 * @author zhangxiaolong
 *
 */
public interface DefaultTargetMapper {
	/**
	 * 添加默认目标
	 * @param defaultTargetEntity
	 */
	public void createDefaultTargets(DefaultTargetEntity defaultTargetEntity);
	
	/**
	 * 更新默认目标
	 * @param defaultTargetEntity
	 */
	public void updateDafaultTargets(DefaultTargetEntity defaultTargetEntity);
	
	/**
	 * 查询全部默认目标
	 * @return 默认目标集合
	 */
	public List<DefaultTargetEntity> retrieveDefaultTarget();
	
	
	/**
	 * 根据项目类型编号和目标属性类型查询默认目标 
	 * @return 默认目标集合
	 */
	public List<DefaultTargetEntity> retrieveDefaultTargetImpl();
	
	/**
	 * 根据默认目标编号多表联合查询默认目标
	 * @return 默认目标集合
	 */
	public List<DefaultTargetEntity> retrieveDefaultTargetYear(String id);
	
	/**
	 * 添加默认目标
	 * 参数为一个默认目标集合，里面有一个实施期目标和多个年度目标，他们可以根据targetType目标类型来区分
	 * 先添加实施目标，添加成功后在添加年度目标，年度目标中的pid需要自己通过实施目标中的id来添加，实施目标没有父节点，年度目标有父节点
	 * @param defaultTargetList
	 */
	public void createListDefaultTarget(List<DefaultTargetEntity> defaultTargetList)throws BusinessException;
	
	/**
	 * 删除默认目标
	 * defaultTargetId为必传项如果没有就抛出BusinessException
	 * @param defaultTargetId
	 */
	public void deleteDefaultTarget(String defaultTargetId);
	
	
	/**
	 * 通过省级用户的组织Id查询实施目标
	 * 通过orgId(省级用户组织id)到目标与组织关系表中查出目标id,接着通过目标id查出对应的目标
	 * @param orgId 省级用户组织id
	 * @return List<DefaultTargetEntity> 默认目标列表
	 */
	public List<DefaultTargetEntity> retrieveDefaultTargetByProOrgId(String oid);
	
	/**
	 * 通过其他司的组织Id查询实施目标
	 * 通过orgId(其他司用户组织id)到目标属性与组织关系表中查出目标属性id,接着通过目标属性id查出对应的默认目标
	 * @param orgId 其他司组织id
	 * @return List<DefaultTargetEntity> 默认目标列表
	 */
	public List<DefaultTargetEntity>retrieveDefaultTargetByOther(String oid);

	/**
	 * 批量创建目标与省区域的对应关系
	 * @param targetOrgRefEntitys
	 */
	public void createDefaultTargetOrganizationRef(List<TargetOrgRefEntity> targetOrgRefEntitys);

	/**
	 * 根据目标编号删除目标与省司局的对应关系
	 * @param tid
	 */
	public void deleteDefaultTargetOrganizationRef(String tid);
	
	/**
	 * 根据目标编号查询省司局
	 * @param tid
	 * @param identify  0代表省司局,1代表其他司
	 * @return 省司局集合
	 */
	public List<OrganizationData> retrieveOrganizationByTid(@Param("tid") String tid,@Param("identify") String identify);

}
